// 导入数据库操作模块
const db = require('../db/index')

exports.addArticle = (req, res) => {
  // 手动判断是否上传了文章封面
  // if (!req.file || req.file.fieldname !== 'cover_img') return res.cc('文章封面是必选参数！')

  // 导入处理路径的 path 核心模块
  const path = require('path')
  const articleInfo = {
    // 标题、内容、状态、所属的分类Id
    ...req.body,
    // 文章封面在服务器端的存放路径
    cover_img: path.join('/uploads', req.file.filename),
    // 文章发布时间
    pub_date: new Date(),
    // 文章作者的Id
    author_id: req.user.id,
  }

  const sql = `insert into ev_articles set ?`
  // 执行 SQL 语句
  db.query(sql, articleInfo, (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 执行 SQL 语句成功，但是影响行数不等于 1
    if (results.affectedRows !== 1) return res.cc('发布文章失败！')
    // 发布文章成功
    res.cc('发布文章成功', 0)
  })
  // TODO：表单数据合法，继续后面的处理流程...
  console.log(req.body) // 文本类型的数据
  console.log('--------分割线----------')
  console.log(req.file) // 文件类型的数据
}

exports.getArticle = (req, res) => {
  // console.log(req.query, '请求参数');
  // 尽管num size通过query得到的是string 但和数字运算时隐式变换 直接用也行
  let num = req.query.pagenum, size = req.query.pagesize, cate_id = Number(req.params.cate_id)
  //cate_id为undefined时 查询会报错。 所以有筛选条件时，先判断该属性有没有值，再用不同的sql查
  const sql = `select * from ev_articles where is_delete=0 and cate_id=?`
  db.query(sql, cate_id, (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    let totalPage = Math.floor(results.length / size) + ((results.length % size) > 0 ? 1 : 0)
    if (num <= totalPage) {
      let start = size * (num - 1)
      let outList = results.slice(start, start + size)
      return res.send({
        code: 0,
        data: {
          total: results.length,
          list: outList
        }
      })
    }
    return res.cc('该页无数据')
  })
}

exports.deleteArticle = (req, res) => {
  const sql = `update ev_articles set is_delete=1 where id=?`
  db.query(sql, Number(req.params.id), (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // SQL 语句执行成功，但是影响行数不等于 1
    if (results.affectedRows !== 1) return res.cc('删除文章分类失败！')
    // 删除文章分类成功
    res.cc('删除文章分类成功！', 0)
  })
}

